<?php
/********************
 “符文之语” -- Rune Word
 darasion[at]gmail.com
 
 躲避关键字过滤的一种尝试。
*********************/


// 由65个互不相同的字符组成
// 例如，天干、地支、十二生肖、五行、八卦、元素周期表，等。
// 原则是不要使用可能组合成关键词的字符。
// 
// 另，由于编码表用于对html进行编码，所以不能选用那些html特殊字符，如 < > & 等。
// 
// 

// 字符集一：
/*/
define('RUNES',
	//天干
	 '甲乙丙丁戊己庚辛壬癸'
	//地支
	.'子丑寅卯辰巳午未申酉戌亥'
	//五行
	.'金木水火土'
	//八卦
	.'乾兑离震巽坎艮坤'
	//大写数字
	.'壹贰叁肆伍陆柒捌玖'
	//四季
	.'春夏秋冬'
	//五音
	.'宫商角徵羽'
	//十二生肖
	.'鼠牛虎兔龙蛇马羊猴鸡狗猪'
	//至此正好65达到个字符，满足了编码条件。
	//不过还是可以多加一些字符，没关系的，到时只取其中65个即可。
	//举例：元素周期表 (缺'金'，五行里已经有了)
	//.'氢氦锂铍硼碳氮氧氟氖钠镁铝硅磷硫氯氩钾钙钪钛钒铬锰铁钴镍铜锌镓锗砷硒溴氪铷锶钇锆铌钼锝钌铑钯银镉铟锡锑碲碘氙铯钡镧铈镨钷钐铕钆钬镝铒铥镱镥铪钽钨铼锇铱铂汞铊铅铋钋砹氡钫镭锕钍镤铀镎钚镅锔锫锎锿镄钔锘'
);
//*/

//字符集二：
//*/
define('RUNES',
                    'ΑαΒβΓγΔδΕεΖζΗηΘθΙιΚκΛλΜμΝνΞξΟοΠπΡρΣσςΤτΥυΦφΧχΨψΩωϜϝϚϛͰͱJȷϺϻϷϸϘϙϞϟͲͳϠϡ'
.str_replace(' ','','AaB8ry 6E3Z H 0 I Kk  MuNv  Oon Pp   TtY   Xx    Ff     j    Qq       '));
//*/

//字符集三：
/*/
//define('RUNES', 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_|~!@#$%^*()+/.,:;=');
//*/

// base64编码改
function rw_encode($in, $runes){

	$tp = base64_encode($in);
	$mp = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
	$out='';
	
	for($i=0,$l = strlen($tp); $i<$l; $i++){
		$out.= mb_substr($runes, strpos($mp, $tp[$i]), 1, 'utf-8');
	}
	
	return $out;
}

// base64解码改
function rw_decode($in, $runes){
	
	$mp = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
	$out = '';
	
	for($i=0,$l = mb_strlen($in, 'utf-8'); $i<$l; $i++){
		$out.= substr($mp, mb_strpos($runes, mb_substr($in,$i,1,'utf-8'), 0, 'utf-8'), 1);
	}
	
	$out = base64_decode($out);
	return $out;
}

// 随机抽取65个字符作为编码表
function rw_generate_runes(){

	$runes = RUNES;

	$arr = array();
	for($i = 0 , $l = mb_strlen($runes, 'utf-8'); $i<$l; $i++){
		array_push($arr, mb_substr($runes, $i, 1, 'utf-8'));
	}
	shuffle($arr);
	
	$runes = mb_substr(implode('', $arr), 0, 65, 'utf-8');
	
	return $runes;
}



?>
